package server

import (
	"data_service/models"
	"errors"
)

// FriendRequestService 提供好友申请相关业务逻辑
type FriendRequestService struct{}

func NewFriendRequestService() *FriendRequestService {
	return &FriendRequestService{}
}

// SendFriendRequest 发送好友申请
func (s *FriendRequestService) SendFriendRequest(fromUserID, toUserID int, message string) error {
	// 检查不能给自己发送申请
	if fromUserID == toUserID {
		return errors.New("不能给自己发送好友申请")
	}

	// 检查是否已经是好友
	if models.CheckAlreadyFriends(fromUserID, toUserID) {
		return errors.New("已经是好友关系")
	}

	// 检查是否已存在待处理的好友申请
	if models.CheckFriendRequestExists(fromUserID, toUserID) {
		return errors.New("已存在待处理的好友申请")
	}

	// 创建好友申请
	return models.CreateFriendRequest(fromUserID, toUserID, message)
}

// GetFriendRequests 获取用户收到的好友申请
func (s *FriendRequestService) GetFriendRequests(userID int) ([]models.FriendRequest, error) {
	return models.GetFriendRequests(userID)
}

// GetSentFriendRequests 获取用户发送的好友申请
func (s *FriendRequestService) GetSentFriendRequests(userID int) ([]models.FriendRequest, error) {
	return models.GetSentFriendRequests(userID)
}

// RespondToFriendRequest 处理好友申请
func (s *FriendRequestService) RespondToFriendRequest(requestID uint, userID int, action string) error {
	// 获取申请详情
	var request models.FriendRequest
	if err := models.GetDB().Where("id = ? AND to_user_id = ?", requestID, userID).First(&request).Error; err != nil {
		return errors.New("好友申请不存在或无权限处理")
	}

	// 更新申请状态
	if err := models.UpdateFriendRequestStatus(requestID, action); err != nil {
		return err
	}

	// 如果接受申请，则添加好友关系
	if action == "accepted" {
		// 添加双向好友关系
		if err := models.AddFriend(request.ToUserID, request.FromUserID); err != nil {
			return err
		}
		if err := models.AddFriend(request.FromUserID, request.ToUserID); err != nil {
			return err
		}
	}

	return nil
}
